﻿#ifndef QCPUINFOPROVIDER_H
#define QCPUINFOPROVIDER_H

#include <QObject>
#include <QString>
#include <QList>

class QCpuInfoProvider : public QObject
{
    Q_OBJECT

public:
    explicit QCpuInfoProvider(QObject *parent = nullptr);

    struct CpuDetails {
        /**
         * @brief model - CPU的型号名称。例如："Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz"
         */
        QString model;

        /**
         * @brief vendor - CPU的制造商。例如："GenuineIntel" 或 "AuthenticAMD"
         */
        QString vendor;

        /**
         * @brief architecture - CPU的架构类型。例如："x86_64" 表示64位架构，"x86" 表示32位架构。
         */
        QString architecture;

        /**
         * @brief physicalCores - 物理核心数。表示CPU芯片上实际存在的核心数量。
         */
        int physicalCores;

        /**
         * @brief logicalCores - 逻辑核心数。考虑到超线程等技术后，系统中可用的核心总数。
         */
        int logicalCores;

        /**
         * @brief cacheSize - CPU缓存大小。通常指的是L3缓存大小，但可能也包括其他级别缓存的信息。单位通常是KB或MB。
         */
        QString cacheSize;

        /**
         * @brief maxFrequency - CPU的最大频率。表示CPU能够达到的最高工作频率，单位通常是GHz。
         */
        QString maxFrequency;

        /**
         * @brief minFrequency - CPU的最小频率。表示CPU在低负载或节能模式下的最低工作频率，单位通常是GHz。
         */
        QString minFrequency;
    };

    QList<CpuDetails> getAllCpusDetails() const;

private:
    QList<CpuDetails> getCpusDetailsWindows() const;
    QList<CpuDetails> getCpusDetailsLinux() const;
    QString extractValueFromWmic(const QString& input, const QString& key) const;
};

#endif // QCPUINFOPROVIDER_H
